=========================================
Классы MarcRecord, RecordField и SubField
=========================================

MarcRecord
==========

Каждый экземпляр класса ``MarcRecord`` соответствует одной записи в базе данных ИРБИС. Он содержит следующие поля:

========= ========= ============================================================
Поле       Тип       Назначение
========= ========= ============================================================
database   string    Имя базы данных, из которой загружена данная запись. Для вновь созданных записей пустая строка
mfn        integer   Номер записи в мастер-файле. Для вновь созданных записей 0
status     integer   Статус записи: логически удалена, отсутствует (см. ниже)
version    integer   Номер версии записи
fields     array     Массив полей записи
========= ========= ============================================================

Статус записи: набор флагов (определены как константы в ``PhpIrbis``)

=================== ======= =================================================
Имя                  Число   Значение
=================== ======= =================================================
LOGICALLY_DELETED    1       Логически удалена (может быть восстановлена)
PHYSICALLY_DELETED   2       Физически удалена (не может быть восстановлена)
ABSENT               4       Отсутствует
NON_ACTUALIZED       8       Не актуализирована
LAST                 32      Последняя версия записи
LOCKED               64      Запись заблокирована на ввод
=================== ======= =================================================

**add($tag, $value='')** -- добавляет в конец записи поле с указанными меткой и значением. Возвращает добавленное поле, поэтому может использоваться для "цепочечных" вызовов методов, добавляющих подполя в это поле (см. пример ниже).

**clear()** -- очищает запись (удаляет все поля). Возвращает ``$this``.

**decode(array $lines)** -- декодирование записи из протокольного представления.

**encode($delimiter)** -- кодирование записи в протокольное представление.

**fm($tag, $code='')** -- получение значения поля (или подполя, если задан ``$code``) с указанной меткой. Если поле (или подполе) не найдено, возвращает ``null``.

**fma($tag, $code='')** -- получение массива значений полей (или подполей, если задан ``$code``) с указанной меткой. Если поля (или подполя) не найдены, возвращает пустой массив.

**getField($tag, $occurrence=0)** -- получение поля с указанной меткой (с учётом повторения). Если поле не найдено, возвращает ``null``.

**getFields($tag)** -- получение массива полей с указанной меткой. Если поля не найдены, возвращается пустой массив.

**insertAt($index, RecordField $field)** -- вставка поля в указанную позицию.

**isDeleted()** -- проверка статуса, не удалена ли запись.

**removeAt($index)** -- удаление поля по указанному индексу.

**removeField($tag)** -- удаление всех полей с указанной меткой.

**reset()** -- сброс состояния записи, отвязка её от базы данных. Поля данных остаются при этом нетронутыми. Возвращает ``$this``.

**verify($throw=true)** -- проверяет, правильно ли сформирована запись (и все её подполя). При обнаружении ошибки бросает исключение, если ``$throw==true``.

.. code-block:: php

    $record = new Irbis\MarcRecord();
    $record->add(700)
        ->add('a', 'Миронов')
        ->add('b', 'А. В.')
        ->add('g', 'Алексей Владимирович');
    $record->add(200)
        ->add('a', 'Заглавие книги');


RecordField
===========

========== ========= ======================================
Поле        Тип       Назначение
========== ========= ======================================
tag         integer   Метка поля
value       string    Значение поля до первого разделителя
subfields   array     Массив подполей
========== ========= ======================================

**__construct($tag=0, $value='')** -- конструктор поля.

**add($code, $value)** -- добавляет подполе с указанными кодом и значением к полю. Возвращает ``$this``, так что может испольоваться для "цепочечных" вызовов.

**clear()** -- очищает поле (удаляет значение и все подполя). Возвращает ``$this``.

**decode($line)** -- декодирование поля из протокольного представления.

**getEmbeddedFields()** -- получает массив встроенных полей из данного поля.

**getFirstSubfield($code)** -- возвращает первое вхождение подполя с указанным кодом или ``null``.

**getFirstSubfieldValue($code)** -- возвращает значение первого вхождения подполя с указанным кодом или пустую строку.

**insertAt($index, SubField $subfield)** -- вставка подполя в указанную позицию.
 
**removeAt($index)** -- удаление подполя по указанному индексу.

**removeSubfield($code)** -- удаление всех подполей с указанным кодом.

**verify($throw=true)** -- проверяет, правильно ли сформировано поле (и все его подполя). При обнаружении ошибки бросает исключение, если ``$throw==true``.

.. code-block:: php

    $field = new Irbis\RecordField(700);
    $field->add('a', 'Миронов')
        ->add('b', 'А. В.')
        ->add('g', 'Алексей Владимирович');


SubField
========

====== ========= ============================
Поле    Тип       Назначение
====== ========= ============================
code    string    Код подполя (один символ!)
value   string    Значение подполя
====== ========= ============================

**__construct($code='', $value='')** -- конструктор подполя.

**verify($throw=true)** -- проверяет, правильно ли сформировано подполе. При обнаружении ошибки бросает исключение, если ``$throw==true``.

.. code-block:: php

    $subfield = new Irbis\SubField('a', 'Подполе A');


RawRecord
=========

Запись с нераскодированными полями/подполями.

========= ========= =============================================================
Поле       Тип       Назначение
========= ========= =============================================================
database   string    Имя базы данных, из которой загружена данная запись. Для вновь созданных записей пустая строка
mfn        integer   Номер записи в мастер-файле. Для вновь созданных записей 0
status     integer   Статус записи: логически удалена, отсутствует (см. ниже)
version    integer   Номер версии записи
fields     array     Массив полей записи в "сыром" виде
========= ========= =============================================================